// 导入angular内置的模块
// BrowserModule模块用来处理各浏览器实现web标准不一致的情况，用来磨平浏览器之间的差异

// NgModule模块用来创建一个模块，当我们创建一个模块时，不用“重头”开始，可借助angular已
// 帮我们实现好的模块功能，把一个普通的类型变成一个模块，方法是：给一个普通的类增加一个@NgModule
// 装饰器

// FormsModule模块用来处理form表单的数据，在angular中如果使用form表单，别忘记把此模块导入
// HttpModule模块主要负责http请求数据。除非你项目中不使用http请求和form表单，一般情况下，
// 常见的项目都会引入FormsModule和HttpModule
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpModule } from '@angular/http';
// 导入根组件
import { AppComponent } from '../components/root/app.component';
// 导入其他模块及组件
import { CustomerModule } from './customer.module';
import { CalcComponent } from '../components/calc/calc.component';
import { SettingComponent } from '../components/setting/setting.component';
import { AboutComponent } from '../components/about/about.component';

import { GreetDirective } from '../directives/greet.directive';

// 给一个普通的类AppModule增加一个装饰器@NgModule
// 就把此类变成了angular中的模块
// 重点关注：@NgModule装饰器的配置项
@NgModule({
  // 导入此模块要使用的组件，指令，管线等和视图相关的类。
  // 注：在angular中,模块，组件，服务，指令，管线等本质上都是类。
  declarations: [
    AppComponent,
    CalcComponent,
    SettingComponent,
    AboutComponent,
    GreetDirective
  ],
  // 导入此模块所使用的第三方模块，注意与declarations的区别
  imports: [
    BrowserModule,
    FormsModule,
    HttpModule,
    // 重点关注：自己定义的模块。主要关注如下两点
    // 1. 如何定义一个模块？
    // 2. 如何使用？
    // 3. 注意此处把指令封装到模块中后，导入到根模块时，要放到imports，
    // 如果不封装成模块，则要放到declarations
    CustomerModule 
  ],
  // 导入提供者（服务）
  providers: [],
  // 启动根组件
  bootstrap: [AppComponent]
})
export class AppModule { }
